package com.fjp.heartguard.app.network

import com.fjp.heartguard.app.data.bean.AccountState
import com.fjp.heartguard.app.data.bean.AppVersion
import com.fjp.heartguard.app.data.bean.Message
import com.fjp.heartguard.app.data.bean.OlderInfo
import com.fjp.heartguard.app.data.bean.OlderList
import com.fjp.heartguard.app.data.bean.OverdueOlder
import com.fjp.heartguard.app.data.bean.QuestionnatireCount
import com.fjp.heartguard.app.data.bean.Reports
import com.fjp.heartguard.app.data.bean.ReportsDetail
import com.fjp.heartguard.app.data.bean.ReportsHistory
import com.fjp.heartguard.app.data.bean.SaveQuestionResult
import com.fjp.heartguard.app.data.bean.UpdateImageResult
import com.fjp.heartguard.app.data.bean.UserInfo
import okhttp3.MultipartBody
import retrofit2.http.Body
import retrofit2.http.Field
import retrofit2.http.FormUrlEncoded
import retrofit2.http.GET
import retrofit2.http.Multipart
import retrofit2.http.POST
import retrofit2.http.Part
import retrofit2.http.Query


/**
 *
 * 时间　: 2019/12/23
 * 描述　: 网络API
 */
interface ApiService {

    companion object {
        const val SERVER_URL = "http://8.141.25.141:8007/"
    }

    /**
     * 登录
     */
    @FormUrlEncoded
    @POST("login")
    suspend fun login(@Field("mobile") mobile: String, @Field("password") password: String): ApiResponse<UserInfo>

    /**
     * 获取验证码
     */
    @GET("get_code")
    suspend fun getCode(@Query("mobile") mobile: String): ApiResponse<String>
    /**
     * 获取验证码
     */
    @POST("check_code")
    @FormUrlEncoded
    suspend fun checkCode(@Field("mobile") mobile: String,@Field("code") code: String): ApiResponse<String>

    /**
     * 获取个人信息
     */
    @GET("user/get_info")
    suspend fun getUserInfo(): ApiResponse<UserInfo>

    /**
     * 版本检测
     */
    @GET("check_version")
    suspend fun checkVersion(): ApiResponse<AppVersion>

    /**
     * 我的-测评数据统计
     */
    @GET("user/questionnaire_count")
    suspend fun getQuestionnaireCount(): ApiResponse<QuestionnatireCount>

    /**
     *获取当前状态
     */
    @GET("get_state")
    suspend fun getState(@Query("version") version: String): ApiResponse<AccountState>

    /**
     *所有预期老人
     */
    @GET("questionnaire/get_overdue_olders")
    suspend fun getOverdueOlders(): ApiResponse<Array<OverdueOlder>>

    /**
     *消息未读数量
     */
    @GET("user/unread_numbers")
    suspend fun unreadNumbers(): ApiResponse<Int>

    /**
     *消息列表
     */
    @GET("user/message_list")
    suspend fun getMessageList(): ApiResponse<ArrayList<Message>>

    /**
     *消息详情
     */
    @GET("user/message_detail")
    suspend fun getMessageDetail(@Query("id") id: Int): ApiResponse<Message>

    /**
     *问卷评估列表
     */
    @GET("user/questionnaire_list")
    suspend fun getQuestionnaireList(@Query("keyword") keyword: String, @Query("page") page: Int, @Query("page_size") pageSize: Int, @Query("data_type") dataType: Int, @Query("older_id") olderId: Int): ApiResponse<Reports>
    /**
     *老人列表
     */
    @GET("/older/list")
    suspend fun getOlderList(@Query("keyword") keyword: String, @Query("page") page: Int, @Query("page_size") pageSize: Int, @Query("data_type") dataType: Int): ApiResponse<OlderList>

    /**
     *老人测评历史
     */
    @GET("user/older_all_questionnaire")
    suspend fun getOlderAllQuestionnaire(@Query("older_id") olderId: Int, @Query("data_type") dataType: Int, @Query("page") page: Int, @Query("page_size") pageSize: Int): ApiResponse<ArrayList<ReportsHistory>>

    /**
     *问卷详情
     */
    @GET("questionnaire/get_info")
    suspend fun getQuestionnaireInfo(@Query("id") id: Int): ApiResponse<ReportsDetail>

    /**
     *保存测评人员信息
     */
    @POST("user/save_info")
    suspend fun saveInfo(@Body userInfo: UserInfo): ApiResponse<String>

    /**
     *保存老年人健康追踪评估问卷
     */
    @POST("questionnaire/save_info")
    suspend fun saveQuestionnaireInfo(@Body olderInfo: OlderInfo): ApiResponse<SaveQuestionResult>

    @Multipart
    @POST("http://8.141.25.141:8000/upload")
    suspend fun uploadImg(@Part body: MultipartBody.Part): UpdateImageResult
    /**
     * 获取个人信息
     */
    @FormUrlEncoded
    @POST("device/add")
    suspend fun deviceAdd(@Field("version") version: String,@Field("no") no: String,@Field("province") province: String,@Field("city") city: String,@Field("district") district: String,@Field("type") type: String): ApiResponse<String>


}